import { _decorator, Component, Label, Node } from 'cc';
const { ccclass, property } = _decorator;

// 全局ID生成器
let idCounter = 0;

// 物品父类
@ccclass('Item')
export class Item extends Component {
    @property
    private item_name: string = '';

    @property
    private item_id: string = '';

    @property
    description: string = '';

    @property
    quantity: number = 1; // 添加物品数量属性

    @property
    user: string = ''; // 添加使用物品的对象属性

    //物品类型
    @property
    itemType: string = '全部';

    /**
     * 构造函数，用于创建一个新的物品实例。
     * @param name - 物品的名称。
     * @param description - 物品的描述。
     * @param quantity - 物品的数量。
     * @param itemType - 物品的类型。
     */
    constructor(name: string='未知物品', description: string='我也不知道是什么，丢了吧', itemType: string='全部', quantity: number=1) {
        // 调用父类的构造函数
        super();
        // 设置物品的名称
        this.item_name = name;
        // 设置物品的描述
        this.description = description;
        // 设置物品的数量
        this.quantity = quantity;
        // 设置物品的类型
        this.itemType = itemType; // 初始化物品类型属性
        // 生成并设置物品的唯一ID
        this.item_id = this.generateId();
    }

    public get name(): string {
        return this.item_name;
    }

    public set name(value: string) {
        this.item_name = value;
    }

    public get id(): string {
        return this.item_id;
    }

    public getQuantity(): number {
        return this.quantity;
    }

    public setQuantity(value: number) {
        this.quantity = value;
    }

    private generateId(): string {
        const hash = this.hash(`${this.constructor.name}-${this.item_name}-${this.description}`);
        return `${hash}-${idCounter++}`;
    }

    private hash(str: string): string {
        let hash = 0;
        for (let i = 0; i < str.length; i++) {
            hash = str.charCodeAt(i) + ((hash << 5) - hash);
        }
        return hash.toString();
    }

    public use(quantity: number, user: string): void {
        // if (this.quantity >= quantity) {
        //     this.quantity -= quantity;
        //     this.user = user; // 设置使用物品的对象
        //     const message = `${user} 使用了 ${quantity} 个 ${this.item_name}（${this.itemType}），剩余 ${this.quantity} 个。`;
        //     this.messageBoxManager.showMessage(1,message); // 调用 MessageBoxManager 的 showMessage 方法
        // } else {
        //     const message = `物品 ${this.item_name}（${this.itemType}）数量不足，无法使用。`;
        //     this.messageBoxManager.showMessage(2,message); // 调用 MessageBoxManager 的 showMessage 方法
        // }
    }

    start() {
        if(this.name){
            this.node.getChildByName('Label').getComponent(Label).string=this.name;
        }
    }

    update(deltaTime: number) {
        
    }
}